
/*@Controller
@RequestMapping("/payment")
public class PayController {
	// web端的商户的充值
	@RequestMapping("/merchantRecharge")
	public String submitRecharge(HttpSession session, HttpServletRequest request, Double money) {
		// 在本地生成客户端
		//payService.insertRecharge(request, session, money);
		System.out.println("发送充值请求。。。。");
		return "forward:alipay/alipayapi.jsp";
	}
}*/

package com.cn.bukeManage.controller;

import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.cn.bukeManage.alipay.util.AlipayNotify;
import com.cn.bukeManage.alipay.util.httpClient.HttpResponse;
//import com.lukebang.service.IPayService;
//import com.lukebang.util.BuluResult;
import com.cn.bukeManage.service.IPayService;


/**
 * 
 * PayController 上午11:41:30 Copyright zhaocj Inc. All Rights reserved.
 * alldios@outlook.com
 *
 */
@Controller
@RequestMapping("/payment")
public class PayController {
	private static Logger logger = LogManager.getLogger(PayController.class.getName());
	@Resource
	private IPayService payService;
	
	
	/**
	 * 订单的悬赏
	 * @param request
	 * @param indentID
	 * @param addPrice
	 * @param relievedBao
	 * @param session
	 * @return
	 */
	/*@RequestMapping("/rewardIndent")
	public String payMeasureIndent(HttpServletRequest request, Integer indentID, Double addPrice,HttpSession session) {
		logger.debug("需要付款的订单ID是：{}，加价费用是：{}，安心保选择：{}", indentID, addPrice);
		try {
			payService.rewardIndent(request,session,indentID,addPrice);
			return "forward:/cms/alipay/alipayapi.jsp";
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	// 余额支付
	@RequestMapping("/balancePay")
	@ResponseBody
	public BuluResult balancePay(HttpServletRequest request, HttpServletResponse response, HttpSession session,
			Double totalMoney, String password, Integer indentId,Double addPrice,Integer relievedBao,Integer type) {
		BuluResult buluResult=new BuluResult();
		if(totalMoney==null | password==null | indentId==null) {
			buluResult.setStatus(1);
			buluResult.setMessage("參數不能為空");
			return buluResult;
		}
		try {
			return payService.balancePayment(request, session, totalMoney, password, indentId,addPrice,relievedBao,type);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			buluResult.setStatus(1);
			buluResult.setMessage("支付失败");
			return buluResult;
		}
	}

	// 支付订单成功NOTIFY
	@RequestMapping("/wapAlipayNotify")
	public void getAlipayapi(HttpServletRequest request, HttpServletResponse response) throws Exception {
		try {
			logger.error("==========进入wap回调地址=============");
			PrintWriter writer = response.getWriter();
			Map<String, String> params = new HashMap<String, String>();
			Map requestParams = request.getParameterMap();
			for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
				String name = (String) iter.next();
				String[] values = (String[]) requestParams.get(name);
				String valueStr = "";
				for (int i = 0; i < values.length; i++) {
					valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
				}
				// 乱码解决，这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
				// valueStr = new String(valueStr.getBytes("ISO-8859-1"),
				// "gbk");
				params.put(name, valueStr);
			}
			// 获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
			// 商户订单号
			String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");
			// 支付宝交易号

			String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");
			// 交易状态
			String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"), "UTF-8");
			// 获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//

			if (AlipayNotify.verify(params)) {// 验证成功
				//////////////////////////////////////////////////////////////////////////////////////////
				// 请在这里加上商户的业务逻辑程序代码
				// ——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
				logger.error("验证成功，进入下一步操作");
				if (trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")) {
					// 判断该笔订单是否在商户网站中已经做过处理
					// 如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
					// 请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
					// 如果有做过处理，不执行商户的业务程序
					// 注意：
					// 退款日期超过可退款期限后（如三个月可退款），支付宝系统发送该交易状态通知
					String extra_common_param = new String(
							request.getParameter("extra_common_param").getBytes("ISO-8859-1"), "UTF-8");
					payService.modifyIndentStatus(request, extra_common_param);
				}
				// ——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
				writer.print("success"); // 请不要修改或删除
				//////////////////////////////////////////////////////////////////////////////////////////
			} else {// 验证失败
				logger.error("验证失败了=============");
				writer.print("fail");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
*/
	// 支付订单成功NOTIFY
		@RequestMapping("/wapAlipayNotify")
		public void getAlipayapi(HttpServletRequest request, HttpServletResponse response) throws Exception {
			try {
				logger.error("==========进入wap回调地址=============");
				PrintWriter writer = response.getWriter();
				Map<String, String> params = new HashMap<String, String>();
				Map requestParams = request.getParameterMap();
				for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
					String name = (String) iter.next();
					String[] values = (String[]) requestParams.get(name);
					String valueStr = "";
					for (int i = 0; i < values.length; i++) {
						valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
					}
					// 乱码解决，这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
					// valueStr = new String(valueStr.getBytes("ISO-8859-1"),
					// "gbk");
					params.put(name, valueStr);
				}
				// 获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
				// 商户订单号
				String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");
				// 支付宝交易号

				String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");
				// 交易状态
				String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"), "UTF-8");
				// 获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//

				if (AlipayNotify.verify(params)) {// 验证成功
					//////////////////////////////////////////////////////////////////////////////////////////
					// 请在这里加上商户的业务逻辑程序代码
					// ——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
					logger.error("验证成功，进入下一步操作");
					if (trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")) {
						// 判断该笔订单是否在商户网站中已经做过处理
						// 如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
						// 请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
						// 如果有做过处理，不执行商户的业务程序
						// 注意：
						// 退款日期超过可退款期限后（如三个月可退款），支付宝系统发送该交易状态通知
						String extra_common_param = new String(
								request.getParameter("extra_common_param").getBytes("ISO-8859-1"), "UTF-8");
						//payService.modifyIndentStatus(request, extra_common_param);该爱
					}
					// ——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
					writer.print("success"); // 请不要修改或删除
					//////////////////////////////////////////////////////////////////////////////////////////
				} else {// 验证失败
					logger.error("验证失败了=============");
					writer.print("fail");
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	// web端的商户的充值
	@RequestMapping("/merchantRecharge")
	public String submitRecharge(HttpSession session, HttpServletRequest request, Double money,Model model) {		
		// 在本地生成客户端
		payService.insertRecharge(request, session, money);
		model.addAttribute("oneMenu","alipay");
		model.addAttribute("twoMenu","alipayapi");
		return "alipay/alipayapi";
	}
}
